perm filename ATOMS.FAI[LSP,BGB] blob sn#017667 filedate 1972-12-27 generic text, type T, neo UTF8
00100	SUBTTL ATOMS
00200	;LISP ATOMS AND OBLIST.
00300	
00400	ATOMS:
00500	
00600	;Make an Atom.
00700	
00800		DEFINE MKAT '(name,type,C,D){
00900		D	XWD -1,.+1
01000			XWD type,.+1
01100			XWD C'name,0
01200			ASCII/name/
01300		}
01400		DEFINE MKAT1 '(iname,type,oname,C){
01600			XWD -1,.+1
01700			XWD type,.+1
01800			XWD C'iname,0
01900			ASCII/oname/
02000		}
02100	
02200	;Make Labels.
02300	
02400		DEFINE ML(name){
02500		name:	XWD -1,0
02600			ASCII/name/
02700		}
02800	
02900	
     

00100	;All the Value Cells.
00200		VNIL:	NIL
00300		%NOPOINT: NIL
00400		VTRUTH:	TRUTH
00500	FOO	VOBLIST: ATOMS-bckets
00600		VBASE:	8+INUM0
00700		VIBASE:	8+INUM0
00800		VBPORG:	INUM0
00900		VBPEND:	INUM0
01000		
01100	;The atom prototype of NIL.
01200	;0:	-1,.+1			;Atom Head in Accumulator 0.
01300	CNIL2:	XWD VALUE,.+1
01400		XWD VNIL,0
01500		ASCII/NIL/
01600	
01700	;The atom prototype of T.
01800	TRUTH:	XWD -1,.+1
01900		XWD VALUE,.+1
02000		XWD VTRUTH,0
02100		ASCII/T/
     

00100		MKAT RPLACA,SUBR
00200		MKAT RPLACD,SUBR
00300		MKAT MINUS,SUBR
00400		MKAT TERPRI,SUBR
00500		MKAT READ,SUBR
00600	
00700		MKAT1 CAR.,SUBR,CAR
00800		MKAT1 CDR.,SUBR,CDR
00900		MKAT1 DIP.,SUBR,DIP
01000		MKAT1 DAP.,SUBR,DAP
01100	
01200		MKAT CAAR,SUBR
01300		MKAT CADR,SUBR
01400		MKAT CDAR,SUBR
01500		MKAT CDDR,SUBR
01600	
01700		MKAT CAAAR,SUBR
01800		MKAT CAADR,SUBR
01900		MKAT CADAR,SUBR
02000		MKAT CADDR,SUBR
02100		MKAT CDAAR,SUBR
02200		MKAT CDADR,SUBR
02300		MKAT CDDAR,SUBR
02400		MKAT CDDDR,SUBR
02500	
02600		MKAT CAAAAR,SUBR
02700		MKAT CAAADR,SUBR
02800		MKAT CAADAR,SUBR
02900		MKAT CAADDR,SUBR
03000		MKAT CADAAR,SUBR
03100		MKAT CADADR,SUBR
03200		MKAT CADDAR,SUBR
03300		MKAT CADDDR,SUBR
03400		MKAT CDAAAR,SUBR
03500		MKAT CDAADR,SUBR
03600		MKAT CDADAR,SUBR
03700		MKAT CDADDR,SUBR
03800		MKAT CDDAAR,SUBR
03900		MKAT CDDADR,SUBR
04000		MKAT CDDDAR,SUBR
04100		MKAT CDDDDR,SUBR
04200	
04300		MKAT MAKNUM,SUBR
04400		MKAT CONS,SUBR
04500		MKAT1 FIX1A,SUBR,ADDR
     

00100		MKAT ATOM,SUBR
00200		MKAT EQ,SUBR
00300		MKAT PRIN1,SUBR
00400		MKAT PRINT,SUBR
00500		MKAT RETURN,SUBR
00600	
00700		MKAT EXPLODE,SUBR
00800		MKAT SASSOC,SUBR
00900		MKAT ASSOC,SUBR
01000		MKAT GCGAG,SUBR
01100		MKAT CHRCT,SUBR
01200	
01300		MKAT LINELENGTH,SUBR
01400		MKAT NUMBERP,SUBR
01500		MKAT EQUAL,SUBR
01600		MKAT GET,SUBR
01700		MKAT INTERN,SUBR
01800	
01900		MKAT MEMBER,SUBR
02000		MKAT ED,SUBR
02100		MKAT MAKNAM,SUBR
02200		MKAT READCH,SUBR
02300		MKAT NOT,SUBR
02400	
02500		MKAT NULL,SUBR
02600		MKAT GENSYM,SUBR
02700		MKAT ZEROP,SUBR
02800		MKAT DIVIDE,SUBR
02900		MKAT GCD,SUBR
03000	
03100		MKAT TIME,SUBR
03200		MKAT FIX,SUBR
03300		MKAT SET,SUBR
03400		MKAT PROG2,SUBR
03500		MKAT LENGTH,SUBR
03600	
03700		MKAT READLIST,SUBR
03800		MKAT LAST,SUBR
03900		MKAT ADD1,SUBR
04000		MKAT SUB1,SUBR
04100		MKAT GCTIME,SUBR
04200	
04300		MKAT REVERSE,SUBR
04400		MKAT SPEAK,SUBR
04500		MKAT MAPLIST,SUBR
     

00100		MKAT GC,SUBR
00200		MKAT GETL,SUBR
00300		MKAT BAKGAG,SUBR
00400		MKAT MEMQ,SUBR
00500		MKAT PUTPROP,SUBR
00600	
00700		MKAT PRINC,SUBR
00800		MKAT FLATSIZE,SUBR
00900		MKAT ERR,SUBR
01000		MKAT MAPCAR,SUBR
01100		MKAT EXAMINE,SUBR
01200	
01300		MKAT DEPOSIT,SUBR
01400		MKAT LSH,SUBR
01500		MKAT NCONS,SUBR
01600		MKAT XCONS,SUBR
01700		MKAT REMPROP,SUBR
01800	
01900		MKAT ARG,SUBR
02000		MKAT SETARG,SUBR
02100		MKAT NOUUO,SUBR
02200		MKAT MINUSP,SUBR
02300	 	MKAT MAP,SUBR
02400	
02500		MKAT MAPC,SUBR
02600		MKAT OUTC,SUBR
02700		MKAT INC,SUBR
02800		MKAT DDTIN,SUBR
02900		MKAT INITFN,SUBR
03000	
03100		MKAT EXCISE,SUBR
03200		MKAT REMAINDER,SUBR
03300		MKAT ABS,SUBR
03400		MKAT PGLINE,SUBR
03500		MKAT SAIL,SUBR
     

00100		MKAT EXPLODEC,SUBR,%
00200		MKAT TYO,SUBR,I
00300		MKAT TYI,SUBR,I
00400	CEVAL:	MKAT1 EVAL,SUBR,*EVAL
00600	
00700		MKAT LIST,FSUBR
00800		MKAT COND,FSUBR
00900		MKAT PROG,FSUBR
01000		MKAT SETQ,FSUBR
01100		MKAT OUTPUT,FSUBR
01200		MKAT GRINDEF,FSUBR
01300	
01400		MKAT ERRSET,FSUBR
01500		MKAT REMOB,FSUBR
01600		MKAT OR,FSUBR
01700		MKAT GO,FSUBR
01800		MKAT ARRAY,FSUBR
01900		MKAT STORE,FSUBR
02000	
02100		MKAT AND,FSUBR
02200		MKAT DEFPROP,FSUBR
02300		MKAT CSYM,FSUBR
02400		MKAT EXARRAY,FSUBR
02500	
02600		MKAT1 QUOTE,FSUBR,FUNCTION
02700		mkat1 INPUT,FSUBR,INPUT
02800		MKAT1 SUBST,SUBR,SUBST
02900		MKAT1 FUNCT,FSUBR,*FUNCTION
03000	
03100		MKAT APPEND,LSUBR
03200		MKAT NCONC,LSUBR
03300		MKAT BOOLE,LSUBR
03400		MKAT APPLY,LSUBR
03500	
03600		MKAT EVAL,LSUBR,O
03700		MKAT ASCII,SUBR,A
03800		MKAT QUOTE,FSUBR,,CQUOTE:
03900		MKAT INUM0,SYM
     

00100		MKAT1 LCALL,SYM,*LCALL,INUM0+%
00200		MKAT1 AMAKE,SYM,*AMAKE,INUM0+%
00300		MKAT1 UDT,SYM,*UDT,INUM0+%
00400		MKAT1 %NOPOINT,VALUE,*NOPOINT
00500	UNBOUND: XWD -1,0↔ASCII/UNBOUND/
00600	
00700		MKAT1 EXPN1,SUBR,*EXPAND1
00800		MKAT1 EXPAND,SUBR,*EXPAND
00900	
01000		MKAT1 PLUS,SUBR,*PLUS,.
01100		MKAT1 DIF,SUBR,*DIF,.
01200		MKAT1 QUO,SUBR,*QUO,.
01300		MKAT1 TIMES,SUBR,*TIMES,.
01400	
01500		MKAT1 APPEND,SUBR,*APPEND,.
01600		MKAT1 RSET,SUBR,*RSET,.
01700		MKAT1 GREAT,SUBR,*GREAT,.
01800		MKAT1 LESS,SUBR,*LESS,.
01900	
02000		MKAT1 PUTSYM,SUBR,*PUTSYM
02100		MKAT1 GETSYM,SUBR,*GETSYM
02150		mkat XSYM,SUBR
02175		mkat XHALF,SUBR
02200	
02300		VSPECBIND←INUM0+SPECBIND
02400		MKAT SPECBIND,SYM,V
02500	
02600		VSPECSTR←INUM0+SPECSTR
02700		MKAT SPECSTR,SYM,V
02800	
02900		VFIX1A←INUM0+FIX1A
03000		MKAT FIX1A,SYM,V
03100	
03200		VNSTR←INUM0+NSTR
03300		MKAT NSTR,SYM,V
     

00100		XWD -1,.+1
00200		XWD SUBR,.+1
00300		XWD NUMVAL,.+1
00400		XWD SYM,.+1
00500		XWD NUMVAL+INUM0,0
00600		ASCII/NUMVAL/
00700	
00800		MKAT OBLIST,VALUE,V
00900		MKAT BASE,VALUE,V
01000		MKAT IBASE,VALUE,V
01100		MKAT BPEND,VALUE,V
01200		MKAT BPORG,VALUE,V
01300	
01400		ML PNAME
01500		ML FIXNUM
01600		ML FLONUM
01700		ML VALUE
01800		ML LAMBDA
01900		ML SUBR
02000		ML SAIBR
02100		ML FSUBR
02200		ML EXPR
02300		ML FEXPR
02400		ML SYM
02500		ML $EOF$
02600		ML LABEL
02700		ML FUNARG
02800		ML LSUBR
02900		ML MACRO
03000	
03100	LAMBD.: XWD -1,0↔ASCII/λ/
03200	QST:	XWD -1,0↔ASCII/?/
03300	
03400	ATOME:	-1 ;End of the atoms.
     

00100	;The FOO list is for fixing up references to HWS.
00200	
00300		DEFINE GARP $(A,B)
00400		<XWD FOO$A,FOO$B>
00500	
00600	FOO	0
00700	FOO	0
00800	FOOLST:
00900		XLIST
01000		FOR I←0,(FOOCNT-2),2{
01100		GARP (→I,→(I+1))
01200		}
01300	LIST
01400	
01500	EFOLST:
01600	
01700	END